//package com.fecean.aabbc.netty.client.prod3;
//
//import com.fecean.aabbc.netty.message3.MessageHeartbeat;
//import io.netty.channel.ChannelHandler;
//import io.netty.channel.ChannelHandlerContext;
//import io.netty.channel.SimpleChannelInboundHandler;
//import io.netty.handler.timeout.IdleState;
//import io.netty.handler.timeout.IdleStateEvent;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.Resource;
//import java.time.Instant;
//import java.util.UUID;
//
//@Slf4j
//@Component
//@ChannelHandler.Sharable
//public class NettyClientHeartbeatHandler extends SimpleChannelInboundHandler<MessageHeartbeat> {
//
//    @Resource
//    NettyClientStarter nettyClientConnector;
//
//    /**
//     ** 影院配置
//     */
//    @Resource
//    CinemaConfig cinemaConfig;
//
//    @Override
//    protected void channelRead0(ChannelHandlerContext channelHandlerContext, MessageHeartbeat messageHeartbeat) throws Exception {
//        log.info("客户端[{}-{}]收到返回心跳[{}-{}]",
//                cinemaConfig.getTenantId(), cinemaConfig.getCinemaCode(),
//                messageHeartbeat.getTenantId(), messageHeartbeat.getCinemaCode());
//    }
//
//    @Override
//    public void channelInactive(ChannelHandlerContext ctx) {
//        log.error("客户端[{}-{}]连接断开，5秒后将重新连接...",
//                cinemaConfig.getTenantId(), cinemaConfig.getCinemaCode());
//        nettyClientConnector.restart(5L);
//        ctx.fireChannelInactive();
//    }
//
//    @Override
//    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
//        if (evt instanceof IdleStateEvent) {
//            IdleState state = ((IdleStateEvent) evt).state();
//            if (state == IdleState.WRITER_IDLE) {
//                MessageHeartbeat messageHeartbeat = new MessageHeartbeat();
//                messageHeartbeat.setId(UUID.randomUUID().toString());
//                messageHeartbeat.setTimestamp(Instant.now().toEpochMilli());
//                messageHeartbeat.setTenantId(cinemaConfig.getTenantId());
//                messageHeartbeat.setCinemaCode(cinemaConfig.getCinemaCode());
//                ctx.writeAndFlush(messageHeartbeat);
//            }
//        } else {
//            super.userEventTriggered(ctx, evt);
//        }
//    }
//}
